// 添加这行导入语句
import { request } from '../../utils/request';
import OrderModifyModal from '../../components/common/OrderModifyModal.vue';
import RecruitModal from '../../components/common/RecruitModal.vue';
export default {
  components: {
    OrderModifyModal,
    RecruitModal
  },
  data() {
    return {
      latitude: 0,
      longitude: 0,
      countdown: '00:01',
      timer: null,
      showModifyModal: false,
      orderId: '',
      rewardAmount: 0, // 添加报酬金额数据字段
      additionalReward: 0.01, // 添加追加报酬字段
      orderInfo: {}, // 订单详情数据字段
      showRecruitModal: false, // 新增：招募弹窗显示状态
      recruitmentStartTime: null, // 新增：招募开始时间
      hasRecruitmentTimeout: false, // 新增：招募是否超时(3分钟)
      candidateCount: 0, // 新增：招募到的候选人数量
      showAddRewardModal: false, // 新增：追加酬金支付弹窗显示状态
      totalAdditionalAmount: 0, // 新增：根据人数计算的总追加金额

    };
  },

  onLoad(options) {
    this.orderId = options.task_id;
    console.log('订单ID:', this.orderId);
    this.getUserLocation();
    this.startCountdown();
    this.fetchOrderDetail(); // 调用获取订单详情方法

    // 监听WebSocket消息
    this.listenWebSocket();
    // 记录招募开始时间
    this.recruitmentStartTime = new Date().getTime();
  },
  onUnload() {
    // 清除计时器
    if (this.timer) {
      clearInterval(this.timer);
    }
    // 移除WebSocket监听
    uni.$off('websocket-message', this.handleWebSocketMessage);
  },
  methods: {

    onModifySuccess(newReward) {
      // 更新当前报酬金额
      this.rewardAmount = newReward;
      // 关闭修改弹窗
      this.showModifyModal = false;
      // 刷新订单详情，确保所有数据都是最新的
      this.fetchOrderDetail();
      // 显示更新提示
      uni.showToast({
        title: '订单已修改成功',
        icon: 'success'
      });
      
      // 如果有差值退还，这里可以添加额外的提示信息
      // 由于前端无法直接知道是否发生了退款，退款逻辑通常由后端处理
    },

    // 新增监听WebSocket消息的方法
    listenWebSocket() {
      uni.$off('websocket-message', this.handleWebSocketMessage);
      uni.$on('websocket-message', this.handleWebSocketMessage);
    },


    // 新增处理WebSocket消息的方法
    handleWebSocketMessage(data) {
      console.log('原始WebSocket消息:', data);
      try {
        let message;
        // 检查是否是有效的JSON格式
        if (typeof data === 'string' && data && (data.startsWith('{') || data.startsWith('['))) {
          console.log('第二次输出WebSocket消息:', data);
          message = JSON.parse(data);
          // 验证消息结构
          if (!message || !message.data) {
            console.error('WebSocket消息结构不完整:', message);
            return;
          }
        } else {
          console.warn('接收到非JSON格式的WebSocket消息:', data);
          return;
        }
        console.log('解析后的消息111:', message);
        // 检查是否是招募到工人的消息，并确保job_id类型匹配
        if (message.type === 'recruit_worker' &&
          String(message.data.job_id) === String(this.orderId)) {
          console.log('收到招募工人消息，订单ID匹配成功');
          // 更新订单信息
          this.orderInfo = {
            ...this.orderInfo,
            task_id: this.orderId,
            ...message.data
          };
          // 更新候选人数量
          this.candidateCount = message.data.total || 0;
          // 显示招募弹窗
          this.showRecruitModal = true;
          console.log('设置showRecruitModal为true:', this.showRecruitModal);
        } else {
          console.log('消息类型不匹配或订单ID不匹配');
        }
      } catch (error) {
        console.error('解析WebSocket消息失败:', error);
        console.error('原始消息数据:', data);
      }
    },
    getUserLocation() {
      uni.getLocation({
        type: 'gcj02',
        success: (res) => {
          this.latitude = res.latitude;
          this.longitude = res.longitude;
        },
        fail: (err) => {
          console.error('获取位置失败', err);
          // 可以设置默认位置
          this.latitude = 39.9042;
          this.longitude = 116.4074;
        }
      });
    },
    onMapReady() {
      console.log('地图加载完成');
    },
    startCountdown() {
      // 顺计时从0开始
      let seconds = 0;
      this.timer = setInterval(() => {
        seconds++;
        const mins = Math.floor(seconds / 60).toString().padStart(2, '0');
        const secs = (seconds % 60).toString().padStart(2, '0');
        this.countdown = `${mins}:${secs}`;

        // 检查是否达到3分钟(180秒)
        if (seconds >= 180 && !this.hasRecruitmentTimeout) {
          this.hasRecruitmentTimeout = true;
          // 如果3分钟内没有招募到人，显示追加佣金提示弹窗
          if (this.candidateCount === 0) {
            this.$refs.noWorkerPopup.open();
          }
        }
      }, 1000);
    },

    showCancelPopup() {
      this.$refs.cancelRecruitPopup.open();
    },
    // 关闭取消招募弹窗
    closeCancelPopup() {
      this.$refs.cancelRecruitPopup.close();
    },
    // 确认取消招募
    confirmCancelRecruitment() {
      // 关闭弹窗
      this.closeCancelPopup();
      // 执行原取消招募逻辑
      this.handleCancel();
    },
    handleCancel() {
      // 显示加载提示
      uni.showLoading({
        title: '取消中...',
        mask: true
      });

      // 调用取消招募接口
      request({
        url: '/WorkerPosts/cancelRecruitment',
        method: 'POST',
        data: {
          job_id: this.orderId
        }
      }).then(res => {
        uni.hideLoading();
        if (res.code === 200) {
          uni.showToast({
            title: '取消招募成功',
            icon: 'success'
          });
          // 延迟返回，确保用户看到提示
          setTimeout(() => {
            uni.navigateBack();
          }, 1500);
        } else {
          uni.showToast({
            title: res.msg || '取消招募失败',
            icon: 'none'
          });
        }
      }).catch(err => {
        uni.hideLoading();
        console.error('取消招募失败:', err);
        uni.showToast({
          title: '网络错误，请稍后重试',
          icon: 'none'
        });
      });
    },
    // 我将添加handleModify方法用于打开修改订单弹窗
    // 修改handleModify方法，使其与内联script中的实现一致
    handleModify() {
      console.log('点击了修改订单，准备显示弹窗');
      this.showModifyModal = true;
      console.log('showModifyModal 状态:', this.showModifyModal);
      console.log('订单ID:', this.orderId);
    },
    fetchOrderDetail() {
      console.log("获取订单详情")
      // 调用订单详情接口获取报酬金额
      request({
        url: '/Parttimejobs/info',
        method: 'GET',
        data: {
          task_id: this.orderId
        }
      }).then(res => {
        console.log('接口返回数据:', res); // 添加调试日志
        if (res.code === 200) {
          console.log('获取到的报酬:', res.data.reward); // 添加调试日志
          this.rewardAmount = res.data.reward;
          this.orderInfo = res.data; // 保存完整订单信息，包括人数等
          console.log('赋值后的rewardAmount:', this.rewardAmount); // 添加调试日志
          console.log('订单详情:', this.orderInfo); // 添加订单详情日志
        } else {
          uni.showToast({
            title: '获取报酬失败',
            icon: 'none'
          });
        }
      }).catch(err => {
        console.error('获取订单详情失败:', err);
        uni.showToast({
          title: '网络错误',
          icon: 'none'
        });
      });
    },
    // 添加确认追加方法
    handleConfirm() {
      // 验证追加金额并转换为数字类型
      this.additionalReward = Number(this.additionalReward);
      const peopleNum = this.orderInfo.people_num || 1;
      console.log('追加金额:', this.additionalReward, '每人 ×', peopleNum, '人');
      if (isNaN(this.additionalReward) || this.additionalReward <= 0) {
        uni.showToast({
          title: '请输入有效的追加金额',
          icon: 'none'
        });
        return;
      }
      // 计算总金额并显示在支付弹窗中
      this.totalAdditionalAmount = this.additionalReward * peopleNum;
      // 显示支付弹窗
      this.showAddRewardModal = true;
    },
    addRewardAfterPayment() {
      // 根据人数计算总追加酬金
      const peopleNum = this.orderInfo.people_num || 1; // 获取订单人数，默认为1
      const additionalReward = Number(this.additionalReward) || 0;
      const totalAdditionalReward = additionalReward * peopleNum;
      
      // 调用追加酬金接口
      request({
        url: '/Parttimejobs/addReward',
        method: 'POST',
        data: {
          task_id: this.orderId,
          additional_reward: this.additionalReward
        }
      }).then(res => {
        if (res.code === 200) {
          uni.showToast({
            title: '追加酬金成功',
            icon: 'success'
          });
          // 更新显示的报酬金额
          this.rewardAmount += parseFloat(totalAdditionalReward);
          // 重置输入框
          this.additionalReward = 0;
        } else {
          uni.showToast({
            title: res.msg || '追加酬金失败',
            icon: 'none'
          });
        }
      }).catch(err => {
        console.error('追加酬金失败:', err);
        uni.showToast({
          title: '网络错误，请稍后重试',
          icon: 'none'
        });
      });
    },
    // 关闭支付
    closeAddRewardModal() {
      // 支付弹窗
      this.showAddRewardModal = false;
    },
    
    // 关闭无人接单提示弹窗
    closeNoWorkerPopup() {
      if (this.$refs.noWorkerPopup) {
        this.$refs.noWorkerPopup.close();
      }
    },
    
    // 返回按钮点击事件
    handleBack() {
      this.closeNoWorkerPopup();
      // 可以添加其他返回相关的逻辑
    },
    
    // 去追加按钮点击事件
    handleGoAddReward() {
      this.closeNoWorkerPopup();
      // 计算总金额并显示在支付弹窗中
      const peopleNum = this.orderInfo.people_num || 1;
      this.totalAdditionalAmount = this.additionalReward * peopleNum;
      // 显示支付弹窗
      this.showAddRewardModal = true;
    },

    // 新增：处理追加酬金支付
    handleAddRewardPayment() {
      uni.showLoading({
        title: '支付中...',
        mask: true
      });
      
      console.log("进入支付")
      // 根据人数计算追加金额
      const peopleNum = this.orderInfo.people_num || 1; // 获取订单人数，默认为1
      const additionalReward = Number(this.additionalReward) || 0;
      const totalAdditionalAmount = additionalReward * peopleNum;
      console.log("支付接口参数:", totalAdditionalAmount, this.orderId, uni.getStorageSync('openid'));
      console.log("追加详情:", this.additionalReward, "每人 ×", peopleNum, "人 =", totalAdditionalAmount);
      request({
        url: '/Payment/createAdditionalPayment',
        method: 'POST',
        data: {
          additional_amount: totalAdditionalAmount,
          task_id: this.orderId,
          openid: uni.getStorageSync('openid')
        },
        success: (payRes) => {
          console.log('支付接口返回数据:', payRes);
          uni.hideLoading();
          if (payRes.data.code === 200) {
            // 调用微信支付
            uni.requestPayment({
              ...payRes.data.data,
              success: () => {
                uni.showToast({
                  title: '支付成功',
                  icon: 'success'
                });
                this.showAddRewardModal = false;
                // 支付成功后再调用追加酬金接口
                this.addRewardAfterPayment();
                // 重置输入框
                this.additionalReward = 0;
              },
              fail: (err) => {
                console.log(err);
                uni.showToast({
                  title: '支付失败：' + err,
                  icon: 'none'
                });
              }
            });
          }
        },
        fail: (err) => {
          uni.hideLoading();
          console.error('创建支付订单失败:', err);
          uni.showToast({
            title: '支付失败，请重试',
            icon: 'none'
          });
        }
      });
    }


  }
};